iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 21

DAY 21 - resume builder: 顯示創建的resume list

  • 分享至 

  • xImage
  •  

哈囉大家好!
昨天處理完了新增resume功能,今天要讀取存在MySQL資料庫的資料,並顯示在頁面上。
首先目前登入後dashboard的畫面如下:
https://ithelp.ithome.com.tw/upload/images/20240921/20168986FaVuUODmJt.png

左邊是簡單的個人panel,會顯示該使用者在github的大頭照與名稱(我是cookie-killer😎),透過最下方的按鈕可以切換到昨天創建的編輯表單頁面。右邊則是會顯示所有使用者創建過的resume清單,每個清單都會是一個按鈕,透過按鈕可以切換到單筆resume的預覽頁面,預計會讓使用者可以在此頁面進行編輯。

若是使用者登入後沒有創建任何resume,畫面則會顯示「無任何創建紀錄」的文字訊息。
大致說明完功能後,接下來簡單介紹新撰寫的程式碼吧!

在撰寫撈資料的部分時,才突然想到昨天創建resume時忘記留一個欄位來判斷是哪位使用者上傳的資料,於是要再勵用migration調整資料表:

public function up(): void
    {
        Schema::table('resume', function (Blueprint $table) {
            $table->string('github_email')->nullable();
        });
    }

協助我和資料庫互動的Model也要調整欄位設定:

class Resume extends Model
{
    use HasFactory;

    protected $table = 'resume';
    protected $fillable = [
       'name',
       'email',
       'phone',
       'social',
       'education',
       'skills',
       'language',
       'selfIntro',
       'github_email' // 新增github_email
    ];
}

調整完資料表後,也要調整送出resume表單的部分:(這裡只有顯示修改部分的程式碼,不然太大坨了XD)

        $github_email = Auth::user()->getEmail; // 使用者的github email

        Resume::create([
            'name' => $this->name,
            'email' => $this->email,
            'phone' => $this->phone,
            'social' => $this->social,
            'education' => $this->education,
            'skills' => $this->skills,
            'language' => $this->language,
            'selfIntro' => $this->selfIntro,
            'github_email' => $github_email // 新增github email
        ]);

這樣一來在撈資料時就可以判斷哪些資料是對應使用者提交的。
因為resume清單要顯示在dashboard頁面,所以要把撈數據的邏輯寫在dashboard component的render() function裡面:

public function render()
    {
        $githubUser = Auth::user();
        
        $github_email = $githubUser->getEmail; // 取得使用者github email
        $resumes = Resume::where('github_email', $github_email)->get();
        return view('livewire.dashboard', ['githubUser' => $githubUser, 
                    'resumes' => $resumes]);
    }

這裡用where() function來撈取符合條件的資料!
即純SQL語法:SELECT * FROM resume WHERE github_email = $github_email

撈取的資料會是陣列型別,將撈取的結果存到$resumes這個變數,就可以在blade template裡使用for loop跑resume list:

<div class="card-body" >
                <div class="d-grid gap-3" style="overflow: scroll;">
                    @if (count($resumes) > 0) // 判斷是否有創建紀錄
                        @foreach ($resumes as $resume)
                            <a class="btn btn-dark" type="button" 
                                href="/resume/{{ $resume->id }}">
                            resume {{ $resume->id }} - {{ $resume->created_at}}
                            </a>
                        @endforeach
                    @else
                        <h4>There's no any resume created!</h4>
                    @endif
                </div>
            </div>

這裡跑回圈之前有先判斷是否至少有一筆創建紀錄,沒有的話就會像開頭畫面顯示「無創建紀錄」文字~
有的話每一筆都會是一個按鈕,按鈕目前暫定會切換到/resume/{{ id }}"這個路徑。


那麼讀取所有創建的resume的過程就簡單到這邊結束了~
明天要來處理單筆紀錄的顯示,要來找一些模板參考一下排版XD
那就明天見啦 祝大家有個美好星期六/images/emoticon/emoticon11.gif


上一篇
DAY20 - Resume builder: 創建填寫表單
下一篇
DAY 22 - resume builder: 顯示單筆resume頁面
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言